平成29年 秋期 基本情報技術者 午後 問09
問09 C言語
次のCプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 〔プログラムの説明〕 文字列の中から,回文(palindrome)を探して表示する関数 find_palindrome である。 回文とは,先頭から読んだ文字の並びと末尾から読んだ文字の並びが一致する文字の並びのことである。 ただし,ここでは次の条件を満たすものとする。
本問のプログラムが表示する回文の例を表1に示す。No1 で示す文字列において, 文字の並び bcØcb は回文である。cØo も回文であるが,本問のプログラムでは, 文字列の先頭に最も近い文字から始まるものを表示する。また,No.2 で示す文字列において, 英字の大文字と小文字は区別しないので,文字の並び BcØCb は回文である。 さらに,No 3 で示す文字列において,英字の大文字と小文字を区別せず,かつ, 記号及び空白文字を無視するので,文字の並び B!cØ Cb は回文である。 No.4 で示す文字列において,文字列の先頭に最も近い b を先頭文字とする文字の並び bcØcb と bcØcb1bcØcb は,いずれも回文である。しかし,本問のプログラムでは, 先頭文字位置が同じ回文が複数あれば,長さが最も短いものを表示する。
(1) 関数 find_palindrome の仕様は,次のとおりである。ここで,引数の値に誤りはないものとする。
関数 find_palindrome は,関数 is_palindrome 及び関数 find_char を使用する。 (2) 関数 is_palindrome の仕様は,次のとおりである。ここで,引数の値に誤りはないものとする。
(3) 関数 find_char の仕様は,次のとおりである。ここで,引数の値に誤りはないものとする。
(4) プログラム中で使用しているライブラリ関数の概要は,次のとおりである。
〔プログラム〕 1 #include <stdio.h> 2 #include <ctype.h> 3 void find_palindrome(const char*); 4 int is_palindrome(const char*, int); 5 const char* find_char(const char*, char); 6 void find_palindrome(const char* text) { 7 int i; 8 int paize: /* 文字の並びの長さ */ 9 const char* ith; /* 文字列 text の第 i 文字へのポインタ */ 1Ø const char* hit: /* 第 i 文字と一致した文字へのポインタ */ 11 for (i = Ø; text[i] != '\Ø'; i++) { 12 if(!isalnum(text[i])) { 13 continue; 14 } 15 ith = &text[i]; 16 hit = find_char(ith + 1, *ith); 17 while (hit != NULL) { 18 psize = a 19 if (is_palindrome(ith, psize)) { 2Ø while (ith < hit + 1) { 21 putchar(*ith); 22 ith++; 23 } 24 putchar('\n'); 25 return; 26 } 27 hit = find_char(hit + 1, *ith); 28 } 29 } 3Ø } 31 int is_palindrome(const char* chars, int size){ 32 int l; 33 int r; 34 for(l = Ø, r = size - 1; l < r; l++, r--){ 35 while(!isalnum(chars[l])){ 36 l++; 37 } 38 while(!isalnum(chars[r])) { 39 r--; 4Ø } 41 if ( b ) { 42 return Ø; 43 } 44 } 45 return 1; 46 } 47 const char* find_char(const char* str, char ch) { 48 int i; 49 for (i = Ø; str[i] !='\Ø'; i++) { 5Ø if( c ){ 51 return &str[i]; 52 } 53 } 54 return NULL; 55 }
a に関する解答群 エ hit - ith オ hit - ith + 1 b に関する解答群 イ l != r ウ chars[l] == chars[r] エ chars[l] != chars[r] オ to tower(chars[l]) == tolower(chars[r]) カ to tower(chars[l]) != tolower(chars[r]) c に関する解答群 イ ch != str[i] ウ tolower(ch) == tolower(str[i]) エ tolower(ch) != tolower(str[i]) オ (ch == tolower(str[i])) || (tolwer(ch) == str[i]) カ (ch == tolower(str[i])) && (tolwer(ch) == str[i])
(1) 関数 find_char を,関数 find_last_char と置き換える。関数 find_last_char の 仕様は,次のとおりである。ここで,引数の値に誤りはないものとする。
(2) 新たに使用するライブラリ関数 strlen(text) は, 文字列 text の長さ(ただし,終端ナル文字 '\Ø' は含まない)を返す。
d に関する解答群 ウ textlen - i + psize エ psize + 2 オ psize - 2 e に関する解答群 ウ i = count - 1; i > Ø エ i = count - 1; i >= Ø
′
設問2で変更した関数 find_palindrome を,次の文字列を引数として実行した。 ここで“␣”は空白文字を表す。
関数 find_palindrome が回文の表示を終了するまでに,関数 find_last_char は f 回呼び出され,その最後の呼出しにおける引数 count の値は g である。 f に関する解答群 エ 5 オ 6 カ 7 g に関する解答群 エ 36 オ 38
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||||||||||||||||||||||||||||||||